[Speedment] StreamsをつかったDBアクセスライブラリ[Java8]
Java8標準機能を使用したライブラリ
Speedmentとは
Speedmentとは、「JavaでのDBアクセスを楽しく簡単に行うためのライブラリ」とのことです。
Java8標準のStreamsを使用して実装するのが特徴で、下記のようなイメージで直感的に使用することができます。
//公式サイトのサンプルのまま List<User> youngUsers = speedment.managerOf(User.class) .stream() .filter(User.AGE.lessThan(18)) .collect(toList());
↑のコードをみるだけでも、なんとなく使い方が想像できますね。
なお、SpeedmentにはOSS版とエンタープライズ版があり、OSS版はMySQL/MariaDBがサポートされています。(Java8以降対応)
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Java : 1.8.0_51
- MySQL : 5.6.25
Speedmentを使ってみる
1.DB環境構築
まずは環境の用意をしましょう。今回使用するDBをMySQLのコマンドラインツールで作成しておきます。
% mysql -u <ユーザー> -p mysql > create database speedment; mysql > use speedment; mysql > create table User (id int not null primary key auto_increment , name varchar(100)); mysql > insert into User values(1,'taro'); mysql > insert into User values(2,'hanako');
ここではspeedmentデータベースを作成し、シンプルなUserテーブルとサンプルデータを作成しました。
2.プロジェクト作成
次に、Mavenを使用したプロジェクトを作成します。
IDEを使って作成してもいいし、archetype:generateのJavaプロジェクトを使ってもいいので、Javaのプロジェクトを作成します。
pom.xmlは下記のようにspeedmentの依存ライブラリ(とplugin)を追記しましょう。
・ ・ <!-- dependencies内 --> <dependency> <groupId>com.speedment</groupId> <artifactId>speedment</artifactId> <version>2.2.2</version> </dependency> ・ ・ <!-- plugins内 --> <plugin> <groupId>com.speedment</groupId> <artifactId>speedment-maven-plugin</artifactId> <version>2.2.2</version> </plugin> ・ ・
3.GUIツールでJavaファイルの生成
Get Startedによると、GUIツールをつかってモデル等必要なファイルを生成します。
下記コマンドを実行し、GUIツールを起動しましょう。
% mvn speedment:gui
先ほど作成したDBにアクセスするための情報を入力し、connectボタンを押します。
下記画面でGenerate codeボタンを押すと、DBスキーマに応じて必要なJavaクラスが生成されます。
ちなみに、
% mvn speedment:generate
とすると、GUIツールは起動せずにJavaファイルの生成だけが実行される様子。
4.Javaファイルの実装
生成されたファイルを使用してDBアクセスしてみましょう。
まずは下記のようにSpeedmentを初期化し、Userテーブルにアクセスしてみます。
Speedment speedment = new SpeedmentApplication().build(); Manager<User> users = speedment.managerOf(User.class);
検索はこんな感じ
//NAMEがsyutaのレコードを取得 Optional<User> u = users.stream() .filter(User.NAME.equal("syuta")) .findAny(); //NAMEがsyutaでないレコード数を取得 int count = users.stream().filter(User.NAME.notEqualIgnoreCase("syuta")).count(); //NAMEがkenでないレコードにて対してSystem.out.printを実行 users.stream().filter(User.NAME.notEqualIgnoreCase("ken")).forEach(lu -> System.out.print(lu));
登録は次のように。Scannerでユーザーの入力をうけつけ、その情報を登録します。
final Scanner scn = new Scanner(System.in); System.out.print("please input name."); final String name = scn.nextLine(); try { User u = users.newInstance().setName(name).persist(); System.out.print("Hello, " + u.getName() + "!"); } catch (SpeedmentException e) { e.printStackTrace(); } }
とりあえず登録と検索のコードをみてみました。
もっと詳細な使い方はどっかにないかなあとおもったんですが、ドキュメントが見つからず。
Githubみるしかないのかもしれません。
まとめ
今回はJava8の標準StreamsをつかってDBのにアクセスするライブラリ、Speedmentをつかってみました。
Java7やOracleを使用している場合、エンタープライズ版を使えば対応できるようです。
ツールもいろいろそろっており、なかなかおもしろいライブラリですね。